package com.porfirio.contapunti;

import java.util.ArrayList;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.content.DialogInterface.OnDismissListener;
import android.content.Intent;
import android.location.LocationManager;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;


public class ContapuntiActivity extends Activity {
	private Gioco gioco;
	private PlayerNameDialog playerNameDialog;
	private AlertDialog alert;
	private SharedPreferences spGioco;
	private String nomeGioco;

	/** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        //imposto spGioco come fonte dello stato salvato
        //spGioco = getSharedPreferences("statoGiocoFile", 0);
    	gioco=new Gioco(getBaseContext());
        
        // Riempio lo spinner
        setSpinner();
        
     // Ascoltatore click su btnStart   
        OnClickListener newGameListener = new OnClickListener() {
            public void onClick(View v) {
     			//alert.show();
            	newGame();
            }
        };
     // Pulsante Nuova partita
        Button btnStart = (Button)findViewById(R.id.btnStart);
        btnStart.setOnClickListener(newGameListener);
          	
//     // Alert per conferma inizio partita   
//        AlertDialog.Builder builder = new AlertDialog.Builder(this);
//    	builder.setMessage(this.getResources().getText(R.string.sure))
//    	       .setCancelable(false)
//    	       .setPositiveButton(this.getResources().getText(R.string.yes), new DialogInterface.OnClickListener() {
//    	           public void onClick(DialogInterface dialog, int id) {
//    	                newGame();
//    	           }
//    	       })
//    	       .setNegativeButton(this.getResources().getText(R.string.no), new DialogInterface.OnClickListener() {
//    	           public void onClick(DialogInterface dialog, int id) {
//    	                dialog.cancel();
//    	           }
//    	       });
//    	alert = builder.create();
    	
   	
     //inizializzo dialogs per nuovo giocatore
		playerNameDialog = new PlayerNameDialog(this);
		playerNameDialog.setOnDismissListener(new OnDismissListener() {
            public void onDismiss(DialogInterface dialog) {
                    startGame();
                    return;
            }
		});        
    }
    
	private void setSpinner(){
    	Spinner spnGioco = (Spinner)findViewById(R.id.spnGioco);
    	ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
                this, R.array.gamesArray, android.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spnGioco.setAdapter(adapter);
        
        nomeGioco=new String(adapter.getItem(0).toString());
        
        spnGioco.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
            	nomeGioco=parent.getItemAtPosition(pos).toString();
            }
            public void onNothingSelected(AdapterView<?> parent) {
            }
        });
    }
    
    private void newGame(){
	   	gioco.setNome(nomeGioco);
//    	Boolean ok=true;
//	    	if (gioco.getNome().equals("")) {
//	    		Toast.makeText(getApplicationContext(), R.string.noGame, Toast.LENGTH_LONG);
//	    		ok=false;
//	    	}
//	    	else {
	    		TextView txtNPlayer = (TextView)findViewById(R.id.txtNPlayer);
	    		gioco.setNumGiocatori((Integer)Integer.parseInt(txtNPlayer.getText().toString()));
	    		if (gioco.getNumGiocatori()<=0) {
	    			Toast.makeText(getApplicationContext(), R.string.noPlayers, Toast.LENGTH_LONG);
//	    			ok=false;
	    		}
//	    	}
//	    	if (ok) {
	    			//Inserisci nomi giocatori
	    			playerNameDialog.startPlayerNameDialog(gioco);
	    			playerNameDialog.show();
		    	  			    			    			
//	    	}
	    }

    private void startGame(){
		// setta alcuni elementi di default per il gioco
		gioco.setContext(getApplicationContext());
		gioco.setEventiGioco();
		
		//avvia Game Activity
		Intent i = new Intent(this, GameActivity.class);
		
		//serializzo i dati della partita (gioco, numero e nomi dei giocatori)
		i.putExtra(".nomeGioco", gioco.getNome());
		i.putExtra(".numeroGiocatori", gioco.getNumGiocatori());
		for (int j=0;j<gioco.getNumGiocatori();j++){
			String s=new String(gioco.getGiocatoreList().get(j).getNome());
			i.putExtra(".nomeGiocatore"+j, gioco.getGiocatoreList().get(j).getNome());
			//i.putExtra(".orderGiocatore"+j, j);
		}
    
		startActivity(i);

    }
    
	@Override
	protected void onPause() {
		//salva stato gioco
//	    SharedPreferences.Editor edit = spGioco.edit();
//		if (!(gioco==null))
//		{
//		    gioco.saveState(edit);	    
//			edit.commit();
//			Toast.makeText(getApplicationContext(), "Stato salvato", Toast.LENGTH_SHORT).show();
			super.onPause();
//		}
	}

	@Override
	protected void onResume() {
		//carica stato gioco
//		Boolean resume=spGioco.getBoolean("resume", false);
//		if (resume) {
//			if (gioco==null)
//				gioco=new Gioco();
//			gioco.loadState(spGioco);
//			Toast.makeText(getApplicationContext(), "Ripristinato lo stato del gioco", Toast.LENGTH_SHORT).show();
//		}
		//credo sia necessario ridisegnare l'interfaccia
		super.onResume();
	}
    
	private void setGioco(Gioco gioco) {
		this.gioco = gioco;
	}

	public Gioco getGioco() {
		return gioco;
	}
   
      
}

/*
	Casi d'uso dell'applicazione:
	- seleziona gioco
	- setta parametri
	- avvia gioco
	- aggiorna punteggi (tab passata)
	- controlla per fine gioco (tab passata)
	- aggiorna punteggi (tab partita)
	- controlla per fine gioco (tab partita)
*/